上一篇介紹的日誌紀錄主要用來找錯誤與優化改善問題方面,而今天的日誌內容會跟MYSQL數據恢復&同步機制有關。
1.二進制日誌- binlog
[mysqld]
#服務ID,啟用二進制日誌必須指定 (*** 沒指定會無法啟動服務!)
server-id = 1
#binlog(ON)&設定檔名以mysql-bin開頭
log-bin = mysql-bin
#binlog的格式(模式:row/statement/mixed)
binlog-format = row
#保留x天binlog (default:0,表示不自動刪除)
expire_logs_days = 1
#寫緩衝x次,刷一次磁碟(0:預設系統每隔一段時間重整快取資料到磁碟,1:每次事務提交就會寫入磁碟,N:每N個事務提交...)
sync-binlog = 1
#檔案大小達到設定值後會以指定名稱&自增數新建切換紀錄檔EX: mysql-bin.00000x
#max_binlog_size = 1G
#看詳細參數使用
root@mysql-master:/mnt/mysql_data/mysql# mysqlbinlog
#檢視mysql-bin.000001檔案內容
root@mysql-master:/mnt/mysql_data/mysql# mysqlbinlog -v mysql-bin.000001
#正式環境上由於資料是一直寫入的狀態binlog量很多直接打開會有畫面跑不完的狀況... 所以通常會加入指定時間去開啟或過濾binlog內容!!
EX: mysqlbinlog -v --database="user" --start-datetime="2020-08-10 07:10:00" --stop-datetime="2020-08-10 07:30:00" mysql-bin.000003
內容: 以事件的形式紀錄(DDL和DML)語句有修改到資料庫內容or結構的二進制檔紀錄檔。(所以像SELECT只是單純查詢沒做到異動就不會紀錄到!!
開啟binlog後,可以看到MYSQL目錄下多了2個檔案分別為:
mysql-bin.000001 : 記錄DDL和DML語句內容。
紀錄模式 EX:在資料表member中一次插入多筆資料 (看圖比較就會了解差異!!)
statement - 只會記錄修改的SQL語句,不會記錄每一行的變化。
row - 紀錄每一句SQL具體被修改的詳細資訊。
mixed -綜合以上2種,根據執行的sql語句,選擇合適的日誌格式紀錄。
<< 普通的SQL使用statement模式儲存,遇到會影響資料準確性的操作(ex.復雜語句or函數操作)則使用row模式儲存 >>
mysql-bin.index : 記錄所有binlog檔案清單。
主要用途:
1.資料恢復:當資料庫資料發生變更錯誤狀況時,通過binlog日誌紀錄將數據還原到某個狀態。
<< 必備機制~ 平時固定備份資料庫數據的重要性 >>
2.主從複製:當有資料更新後,主寫庫(Master)透過binlog記錄傳遞給從庫(Slave)進行更新,達到主從(Master-Slave)資料庫資料的同步一致。
了解binlog的用途該如何使用,下一篇帶大家實作使用 binlog & 恢復流程